From: Florian Müllner Date: Tue, 2 Mar 2021 18:48:55 +0000 (+0100) Subject: workspaceThumbnails: Update indicator on workspace changes X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~616^2^2~175 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=30f0c9f94399c4a94ff9cf1fd7083e08ad473536;p=gnome-shell.git workspaceThumbnails: Update indicator on workspace changes We block state updates while the indicator for the active workspace is animating. To track that, we check whether the scroll-adjustment's value matches the active workspace index. That works as long as the adjustment's value changes after the active workspace, but not when switching workspaces via SwipeTracker which only changes the active workspace after transitioning to the new scroll value. To fix that, update the indicator on workspace changes as well. Part-of: --- diff --git a/js/ui/workspaceThumbnail.js b/js/ui/workspaceThumbnail.js index 17d29d0d1..79c8df224 100644 --- a/js/ui/workspaceThumbnail.js +++ b/js/ui/workspaceThumbnail.js @@ -706,24 +706,13 @@ var ThumbnailsBox = GObject.registerClass({ }); this.connect('destroy', () => this._onDestroy()); - this._switchWorkspaceNotifyId = 0; this._nWorkspacesNotifyId = 0; + this._activeWorkspaceChangedId = 0; this._syncStackingId = 0; this._scrollAdjustment = scrollAdjustment; - this._scrollValueId = this._scrollAdjustment.connect('notify::value', - adj => { - const { workspaceManager } = global; - const activeIndex = workspaceManager.get_active_workspace_index(); - - this._animatingIndicator = adj.value !== activeIndex; - - if (!this._animatingIndicator) - this._queueUpdateStates(); - - this.queue_relayout(); - }); + () => this._updateIndicator()); } _onDestroy() { @@ -762,6 +751,19 @@ var ThumbnailsBox = GObject.registerClass({ this.notify('should-show'); } + _updateIndicator() { + const { value } = this._scrollAdjustment; + const { workspaceManager } = global; + const activeIndex = workspaceManager.get_active_workspace_index(); + + this._animatingIndicator = value !== activeIndex; + + if (!this._animatingIndicator) + this._queueUpdateStates(); + + this.queue_relayout(); + } + _activateThumbnailAtPoint(stageX, stageY, time) { const [r_, x] = this.transform_stage_point(stageX, stageY); @@ -992,6 +994,9 @@ var ThumbnailsBox = GObject.registerClass({ this._nWorkspacesNotifyId = workspaceManager.connect('notify::n-workspaces', this._workspacesChanged.bind(this)); + this._activeWorkspaceChangedId = + workspaceManager.connect('active-workspace-changed', + () => this._updateIndicator()); this._workspacesReorderedId = workspaceManager.connect('workspaces-reordered', () => { this._thumbnails.sort((a, b) => { @@ -1019,13 +1024,17 @@ var ThumbnailsBox = GObject.registerClass({ if (this._thumbnails.length == 0) return; + const { workspaceManager } = global; + if (this._nWorkspacesNotifyId > 0) { - let workspaceManager = global.workspace_manager; workspaceManager.disconnect(this._nWorkspacesNotifyId); this._nWorkspacesNotifyId = 0; } + if (this._activeWorkspaceChangedId > 0) { + workspaceManager.disconnect(this._activeWorkspaceChangedId); + this._activeWorkspaceChangedId = 0; + } if (this._workspacesReorderedId > 0) { - let workspaceManager = global.workspace_manager; workspaceManager.disconnect(this._workspacesReorderedId); this._workspacesReorderedId = 0; }